package test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class PlanTrees {
    public static void main(String[] args) {
        int[] arr = {0,0,1,0,0,0};
        // 定义容器保存结果
        List<int[]> resList = new ArrayList<>();
        // 状态指针
        int num = 0;
        // 开始递归
        diGuiMethod(num,arr,resList);
        // 输出
        for (int[] ints : resList) {
            System.out.println(Arrays.toString(ints));
        }

    }

    public static void diGuiMethod(int num, int[] arr, List<int[]> resList) {
        // 停止条件
        if (num >= arr.length){
            // 保存解
            int[] oneRes = arr.clone();
            resList.add(oneRes);
            return;
        }

        // 获取状态列表
        List<int[]> nextState = getNextState(num,arr);

        // 状态检查
        if (nextState.size() != 0){
            // 循环状态
            for (int i = 0;i < nextState.size() ;i ++){
                // 改变状态
                int[] temp = arr;
                arr = nextState.get(i);
                // 递归
                diGuiMethod(num + 1,arr,resList);
                // 返回原状态
                arr = temp;
            }
        }else {
            diGuiMethod(num + 1,arr,resList);
        }

    }

    private static List<int[]> getNextState(int num, int[] arr) {
        List<int[]> nextStateList = new ArrayList<>();
        if (arr[num] == 0){
            if (!(num - 1 >= 0 && arr[num - 1] == 1 || num + 1 < arr.length && arr[num + 1] == 1)){
                int[] temp = arr.clone();
                temp[num] = 1;
                nextStateList.add(temp);
                temp = arr.clone();
                nextStateList.add(temp);
            }
        }
        return nextStateList;
    }
}
